//
// Description: 843. n-皇后问题
// Created by Loading on 2022/5/15.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 20;

int n;
// 结果数组
char g[N][N];
// 列、正对角线、反对角线标志位数组
bool col[N], dg[N], udg[N];

void dfs(int index) {
    if (index == n) {
        // 搜索结束，输出结果
        for (int i = 0; i < n; ++i) {
            puts(g[i]);
        }
        puts("");
        return;
    }
    // 寻找哪一列可以放置
    for (int i = 0; i < n; ++i) {
        /* 正对角线行列下标相加相等 */
        /* 反对角线列下标减行下标相等，可能为负，故+n */
        if (!col[i] && !dg[index + i] && !udg[i - index + n]) {
            // 更改状态和结果数组
            col[i] = dg[index + i] = udg[i - index + n] = true;
            g[index][i] = 'Q';
            dfs(index + 1);
            // 回溯，恢复现场
            col[i] = dg[index + i] = udg[i - index + n] = false;
            g[index][i] = '.';
        }
    }
}

int main() {
    cin >> n;
    // 初始化结果数组
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            g[i][j] = '.';
        }
    }

    // 按行遍历
    dfs(0);

    return 0;
}